Skip to content

docs(ios-uikit): pin/save, pin conversations and thread subscription parity - #519

Open
shreeyajoshi-cometchat wants to merge 4 commits into
mainfrom
docs/ios-pin-save-threads-parity
Open

docs(ios-uikit): pin/save, pin conversations and thread subscription parity#519
shreeyajoshi-cometchat wants to merge 4 commits into
mainfrom
docs/ios-pin-save-threads-parity

Conversation

@shreeyajoshi-cometchat

@shreeyajoshi-cometchat shreeyajoshi-cometchat commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

1. Restructure, and remove an API that does not exist (f2312791)

Core features now match the other platforms: Pin Message and Save Message merge into one Pin & Save Messages section (iOS was the only platform splitting them), Pin Conversations is added, and Thread Subscription becomes a subsection of Threaded Conversations rather than a top-level section.

Every component-level enableThreadSubscription the docs described did not exist. It was removed from the message list, both headers, the pinned-messages page (invented wholesale there) and the guide, folding each described behaviour into the flag that does exist. hideThreadSubscriptionOption is likewise not a CometChatMessageList property — it lives on AdditionalConfiguration, and the sample now sets it there.

2. Document the opt-out (cd990e9a)

The feature ships on by default with no dashboard flag, so CometChatThreadSubscriptionConfig.setEnabled(false) is the only way to remove it — and nothing in the iOS docs said so. Adds a Turning the Feature Off section covering the call, how it ANDs with the per-instance hideThreadSubscription* flags (gate = whole app, hide flags = one screen), and that it can be flipped at any time rather than only before CometChatUIKit.init.

…ThreadSubscription

Core features now match the other platforms:

- Pin Message and Save Message merge into one "Pin & Save Messages"
  section. iOS was the only platform splitting them.
- Add "Pin Conversations", which iOS shipped in 5.1.22 undocumented.
- Thread Subscription becomes a subsection of Threaded Conversations
  rather than a top-level section.

Every component-level `enableThreadSubscription` the docs described does
not exist. The only real gate is on UIKitSettings, and the components
expose the `hideThreadSubscription*` half — which is what the other
platforms document too. Removed from the message list, both headers, the
pinned-messages page (invented wholesale there) and the guide, folding
the behaviour each section described into the flag that does exist.

`hideThreadSubscriptionOption` is likewise not a CometChatMessageList
property; it lives on AdditionalConfiguration, so the sample now sets it
there.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The feature ships on by default and has no dashboard flag, so
CometChatThreadSubscriptionConfig.setEnabled(false) is the only way to remove it
from an app — and nothing in the iOS docs said so. Integrators had no way to find
the switch short of reading the kit source.

Adds a "Turning the Feature Off" section to the guide covering the call itself,
how it ANDs with the per-instance hideThreadSubscription* flags (gate = whole
app, hide flags = one screen), and that it can be flipped at any point rather
than only before CometChatUIKit.init. A note records that this is the only
control that will ever exist, and names the Android and React Native equivalents
so a reader arriving from another kit lands in the right place. A warning ported
from the RN guide records that closing the gate hides the controls but does NOT
stop subscriptions or their notifications — users are still auto-subscribed by
replying or being @-mentioned.

Also corrects the reference gate snippet, which listed two of its three clauses
and omitted the gate itself, and cross-references the new section from the four
places a reader meets the feature: core-features, the message list's
hideThreadSubscriptionOption, and hideThreadSubscriptionButton on both headers.
The two header pages already said "while leaving the feature on" without ever
naming what turned it off.

Signatures verified against the kit source: setEnabled takes an unlabelled Bool,
isEnabled() returns Bool.

Documents an API that is committed but not yet built or merged — if the type is
renamed in review, these five files need the same rename.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Verified the bell's on-screen placement against the Android and React kit
sources rather than component names. Every CometChat platform renders the
subscription bell in the thread screen's top bar: Android's CometChatThreadScreen
puts it in CometChatToolbar(actions:) and hides the reply-count bell, and React's
CometChatThreadHeaderTopBar mounts SubscriptionToggle inside __top-bar. On iOS
CometChatMessageHeader in thread mode is what lands it there.

- Document CometChatMessageHeader as the bell to use, with a hosting example
  pinning it to the safe-area top.
- Reframe the CometChatThreadedMessageHeader bell as a fallback for a thread
  screen with no top bar, matching how Android coordinates the two, rather than
  as a co-equal choice.
- Drop the claim that this matches "where the React and React Native kits place
  theirs" — true of the placement, false of the component. React's bell is on
  CometChatThreadHeader and React Native trunk ships no header bell.
- core-features: threadSubscription is enabled by default and spans both
  surfaces (the opt-in gate was removed with UIKitSettings.enableThreadSubscription).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@mintlify

mintlify Bot commented Sep 11, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated
cometchat 🟢 Ready View Preview Sep 11, 2026, 9:04 AM

💡 Tip: Enable Automations to automatically generate PRs for you.

The conversations page had zero pin coverage across all 1,592 lines, while
core-features linked to it as the component reference that "provides the
pin/unpin option, the row indicator, and pinned-first ordering" — a promise the
destination page did not keep. `enablePinConversation` was documented nowhere
except one code sample. Every other platform documents this on its own
conversations page: React Native, Android, React and Angular all do.

Adds, modelled on the React Native section:

- `enablePinConversation` and `hidePinConversationOption` prop sections.
- A "Pinning Conversations" section covering pinned-first ordering, the
  private-to-user semantic, and confirm-on-unpin.
- The two gates, which is the part that bites: the swipe action needs the
  `features.ux.conversations.pinned.enabled` app setting mapped AND
  `enablePinConversation`. The kit reads the app setting via
  `CometChat.isPinConversationEnabled()`, restored to the guard in
  uikit-ios 51a047c6c now that the backend has shipped the flag.
- Admin pins, with the `pinnedAt` / `pinnedBy` reads an integrator needs to
  detect one. Both are @objc public on the SDK's Conversation; the kit's own
  `systemPinner` constant is internal, so the "app_system" sentinel has to be
  compared directly — noted as a gap against RN's
  `isSystemPinnedConversation()`.
- The `PinConversationErrorCodes` table.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant